跳到主要内容

Julia 数

阐述

Number 抽象类型及其子类型。

zero()one() 返回对应类型的零和一。

实数

整数

Integer <: Real 抽象类型及其子类型。Integer 具有两个抽象子类型 SignedUnsigned,分别用于定义有符号和无符号类型。

  • Signed 的子类型:Int8, 16, 32, 64, 128
  • Unsigned 的子类型:Bool, UInt8, 16, 32, 64, 128
  • 别名 Int/UInt 作为操作系统所指定的原生整数类型

整数运算上溢后会发生取模操作

有理数

有理数类型由 Rational{T<:Integer} <: Real 参数类型定义,参数为整数类型并且属于 Real 的子类型。

有理数创建时会自动约分,并且使得分母非负。

有理数可以转换为浮点数,并且保持下式成立:float(a//b) == a/b

浮点数

浮点数类型由 AbstractFloat 抽象类型及其子类型定义。

  • 基本类型:Float16, Float32, Float64
  • BigFloat

复数

复数类型由 Complex{T<:Real} <: Number Julia 参数类型定义。可以用 complex(a, b) 的形式构造。

实例

字面量

整数

  • 无前缀字面量为有符号整数,类型为 Int32Int64
    • 64 位操作系统上永远是 Int64
    • 32 位操作系统上按实际大小选择
  • 0x, 0o, 0b 开头的字面量为无符号整数,类型取决于将该字面量的第一位换成 1 的大小所需要的存储空间
    • 0x01 是一个 UInt8,而 0x0001 是一个 UInt16
  • 带负号的无符号整数视为二进制补码

有理数

Rational{Int} 字面量可以用形如 2//3 的表达式表示。

  • im 表示虚数单位
  • 可以用 1 + 2im 的形式表示字面量

浮点数

  • 带小数点的数定义 Float64
  • 科学计数法(e 或 E)定义 Float64
  • 科学计数法(f)定义 Float32
  • 以 2 为底的十六进制科学计数法(p)定义 Float64,如 0x1.8p3
  • 下划线可以用于分隔数字

特殊浮点数值:

  • 各类型的正 0 和负 0:相等但 bitstring 表示不同
  • 各类型的
    • Inf/Inf16/Inf32:大于所有的有限浮点数
    • -Inf/-Inf16/-Inf32:小于所有的有限浮点数
    • NaN/NaN16/NaN32:不等于所有浮点数,包括它自身
  • 机器 epsilon:eps(T) 给出类型 T 中 1 和下一个浮点数的距离,而 eps(x) 给出 x 和下一个浮点数的距离

性质

转换

指在两种 <:Number 的类型之间进行转换。有三种方式:

  • Julia 构造函数 T(x)Julia 转换 convert(T, x)
    • 对浮点数可能用正负无穷表示
    • 对整数如果表示不了则抛出错误
  • 当目标类型是整数时,用 x % T
    • T 是一个 nn 位整数类型,转换为模 2n2^n 同余的值
  • 当目标类型是整数时,用 round(T, x)
Int8(127)
Int8(128) # error
Int8(3.14) # error
128 % Int8 # -128
round(Int8, 127.6) # error

相关内容

参考文献

  • 有些函数输入实数时返回实数,输入复数时返回复数,如 sqrt